#ifndef WOLF_TEST_HPP
#define WOLF_TEST_HPP

#include <string>

namespace wolf
{
    using namespace std;
    /**
     * @brief A generic class type
     *
     * Call the method run to run a test. The tests always suppose that
     *  it the sdl engine already started (i.e. the SDL_Init() has been called).
     *  the other staff is responsability of the test.
     *
     * It is an abstract class, the actual tests are made by its subclasses.
     **/
    class Test
    {
    public:
        /**
         * @brief Creates a test with given name
         *
         *
         **/
        Test( const string &name ): _name( name ) {}
        virtual ~Test() {}

        /**
         * @brief Run a test
         *
         * Runs a test on the system. The sdl engine is supposed to be initialized
         *  before a test, but the subsystem's is not. So functions like SDL_SetVideoMode()
         *  should be called by the test.
         *
         * @return If the test is ok;
         **/
        virtual bool run() = 0;

        /**
         * @brief Returns the test's name
         *
         * This name doesn't have no meaning on the test and just is useful to display a title on
         *  screen.
         **/
        const string &name()
        {
            return _name;
        }
    private:
        string _name;
    };

}

#endif // WOLF_TEST_HPP

